package com.yesun.dcm.rpc;

import com.yesun.dcm.commons.extension.Adaptive;
import com.yesun.dcm.commons.extension.SPI;
import com.yesun.dcm.commons.rpc.URL;

import java.util.Map;

@SPI("dcm")
public interface Protocol<T> {

    /**
     * @Adaptive注解，表示需要生成动态类的方法
     * @param invoker
     * @param map
     * @return
     */
    @Adaptive
    Exporter<T> export(Invoker<T> invoker, Map<String, Object> map);

    @Adaptive
    Invoker<T> refer(Class<T> type, URL url);

    void destroy();

}
